home *** CD-ROM | disk | FTP | other *** search
/ The Fatted Calf / The Fatted Calf.iso / Applications / Audio / Patchmix / XWindowsSource / tree.c < prev    next >
C/C++ Source or Header  |  1992-03-28  |  2KB  |  81 lines

  1. static char rcsid[] = "$Header: tree.c,v 1.1 90/08/27 17:09:44 mara Exp $";
  2.  
  3. /* 
  4.  *  tree.c
  5.  *
  6.  *  Written by Mara Helmuth
  7.  *
  8.  *  Description: Tree classes for Cmix X graphical interface
  9.  * 
  10.  *  $Log:    tree.c,v $
  11.  * Revision 1.1  90/08/27  17:09:44  mara
  12.  * Initial revision
  13.  * 
  14.  * Revision 1.3  90/05/13  15:44:09  mara
  15.  * *** empty log message ***
  16.  * 
  17.  * Revision 1.2  90/03/01  20:08:47  mara
  18.  * Calls intrument::process_ugen
  19.  * Constructor inserts all.
  20.  * 
  21.  */
  22.  
  23. #include "plus.h"
  24.  
  25. ugen_tree::ugen_tree(int s, int out_ugen, getinputtype l, getinputtype r)
  26. {
  27.     root = 0;
  28.     size = s;
  29.     get_left = l;
  30.     get_right = r;
  31.  
  32.     root = new s_node;
  33.     root->left = root->right = 0;
  34.     root->contents = out_ugen;
  35.     insert(root);
  36. }
  37.  
  38. void ugen_tree::insert(s_node* parent)
  39. {
  40.     s_node* left_node = new s_node;
  41.     left_node->contents = get_left(parent->contents);
  42.     left_node->left = left_node->right = 0;
  43.     parent->left = left_node;
  44.     if(left_node->contents > 0)
  45.         insert(left_node);
  46.     else
  47.         printf("beginning of branch\n");
  48.  
  49.     s_node* right_node = new s_node;
  50.     right_node->contents = get_right(parent->contents);
  51.     right_node->left = right_node->right = 0;
  52.     parent->right = right_node;
  53.     if(right_node->contents > 0) {
  54.         printf("getting last (right) branch of ugen %d\n",parent->contents);
  55.         insert(right_node);
  56.     }
  57.     else
  58.         printf("beginning of branch\n");
  59.     printf("now do ugen %d\n",parent->contents);
  60.     inst.instrument::process_ugen(parent->contents, parent->left->contents, parent->right->contents);
  61. }
  62.  
  63. void ugen_tree::clear(s_node* n,int first)
  64. {
  65.     s_node* current;
  66.     if (first) {
  67.         current = root;
  68.         first = 0;
  69.         root = 0;
  70.     }
  71.     else
  72.         current = n;
  73.     if (current != 0) {
  74.         clear(current -> left,first);
  75.         clear(current -> right,first);
  76.         if (current) {
  77.             delete current;
  78.         }
  79.     }
  80. }
  81.